
const { exec } = require('child_process');

function once(fn) {
  var called = false;
  return function () {
    if (!called) {
      fn.apply(this, arguments);
      called = true;
    }
  };
}

module.exports = function (command, message, done) {
  done = once(done);

  // 构建要执行的命令字符串
  // 注意：message 是一个参数
  var fullCommand = `sh ${command} "${message}"`;
  
  exec(fullCommand, (error, stdout, stderr) => {
      if (error) {
        console.error(`Error executing script: ${error.message}`);
        done(error, { stdout: stdout, stderr: stderr });
        return;
      }
    //   if (stderr) {
    //     console.error(`Stderr: ${stderr}`);
    //     done(error, { stdout: stdout, stderr: stderr });
    //     return;
    //   }
  
      
        console.log(`Stdout: ${stdout}`);
        console.log(`Stderr: ${stderr}`);
        
        //Git 命令（如 git push）可能会将状态信息（如哪些分支被更新、进度信息等）输出到 stderr，即使这些不是错误。这是 Git 的设计选择，可能是为了确保这些信息不会与正常的命令输出混淆，特别是在脚本或自动化环境中。
        
        //所以将stdout和stderr 同时输出到stdout
        done(null, {stdout: stdout+stderr, stderr: 'Congratulations! No errors! ^_^ '});
    });
};

